<?php

use Doctrine\Common\Collections\ArrayCollection;

/**
 * Formula
 *
 * @Table(name="formula")
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="tipo", type="string")
 * @DiscriminatorMap({"STD" = "Doctrine_Model_Entities_Standard", "VBL" = "Doctrine_Model_Entities_Variable", "MANUAL" = "Doctrine_Model_Entities_Manual", "STDN" = "Doctrine_Model_Entities_StandardNegocio", "STDN" = "Doctrine_Model_Entities_StandardNegocio", "VBLN" = "Doctrine_Model_Entities_VariableNegocio", "DNI" = "Doctrine_Model_Entities_Dni"})
 */
class Doctrine_Model_Entities_Formula extends Doctrine_Model_Entities_Base {

    /**
     * @var integer $id
     *
     * @Column(name="id", type="integer", nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $descripcion
     *
     * @Column(name="descripcion", type="string", length=50, nullable=false)
     */
    private $descripcion;

    /**
     * @OneToMany(targetEntity="Doctrine_Model_Entities_Tasa", mappedBy="formula" , cascade={"persist"})
     */
    private $tasas;

    function __construct() {
        $this->tasas = new ArrayCollection();
    }

    public function agregarTasa(\Doctrine_Model_Entities_Tasa $tasa) {
        if (!$this->tasas->contains($tasa)) {
            $this->tasas->add($tasa);
        }
    }

    public function getTasas() {
        return $this->tasas;
    }
    
    public function getTasasPorSucursal($sucursalId) {
        $tasas = new ArrayCollection();
        foreach ($this->tasas as $tasa) {
            if ($tasa->getSucursal()->getId() == $sucursalId) {
                $tasas->add($tasa);
            }
        }
        return $tasas;
    }

    public function obtenerTasaCalculo($cuotas) {
        $result = null;

        foreach ($this->getTasas() as $tasa) {

            if ($tasa->getActivo()) {
                if ($tasa->enRango($cuotas)) {
                    $result = $tasa;
                }
            }
        }
        return $result;
    }
    
    public function obtenerTasaCalculoPorSucursal($cuotas, $sucursalId) {
        $result = null;
        foreach ($this->getTasas() as $tasa) {
            if ($tasa->getActivo() && $tasa->getSucursal()->getId() == $sucursalId) {
                if ($tasa->enRango($cuotas)) {
                    $result = $tasa;
                }
            }
        }
        return $result;
    }

    /**
     * Get id
     *
     * @return integer $id
     */
    public function getId() {
        return $this->id;
    }

    /**
     * Set descripcion
     *
     * @param string $descripcion
     */
    public function setDescripcion($descripcion) {
        $this->descripcion = $descripcion;
    }

    /**
     * Get descripcion
     *
     * @return string $descripcion
     */
    public function getDescripcion() {
        return $this->descripcion;
    }

    public function obtenerMontoPorCuota($monto, $cant_cuotas, $montoUsuario = null, $sucursalId = null) {
        $tasaActual = $this->obtenerTasaCalculoPorSucursal($cant_cuotas, $sucursalId);
        if ($tasaActual) {
            $valorTasaActual = $tasaActual->getValor();
        } else {$valorTasaActual = 0;  }
        $interes = $monto * ($valorTasaActual / 100) * ($cant_cuotas / 12);
        return ($monto + $interes) / $cant_cuotas;
    }
    public function obtenerMontoPorCuotaConTasaCustom($monto, $cant_cuotas, $montoUsuario = null, $sucursalId = null,$valorTasaActual) {
         
        $interes = $monto * ($valorTasaActual / 100) * ($cant_cuotas / 12);
        return ($monto + $interes) / $cant_cuotas;
    }

    public function obtenerFechaPrimieraCuota($unaFecha) {
        return $unaFecha;
    }

    public function soyVariable() {
        return false;
    }
    
       public function obtenerTasasNegocios() {
        $result = new ArrayCollection();
        foreach ($this->getTasas() as $tasa) {
            if ($tasa->getActivo() && $tasa->getSucursal()->getNegocio() == 1) {
                $result->add($tasa);
            }
        }
        return $result;
    }


}